『Real World HTTP 第2版』
https://gyazo.com/2ed9e2d4c7d81b41bdffc47a87b76925
1章 HTTP/1.0の世界:基本となる4つの要素
1.1.1 テストエコーサーバーの実行
1.3 HTTP/0.9から1.0への道のり
1.4.1 ヘッダーの送信
1.4.2 ヘッダーの受信
1.4.5 電子メールとの違い
1.5 HTTPの先祖(2)ニュースグループ
1.5.1 メソッド
1.5.2 ステータス
1.6.1 POST送信したのに「GETメソッドは受け付けられない」エラー
1.7 URL(Uniform Resource Locators) 1.7.1 URLの構造
1.7.2 URLと国際化
1.7.3 正規URL
1.8 ボディ
1.8.1 GETリクエスト時のボディ
1.9 本章のまとめ
2章 HTTP/1.0のセマンティクス:ブラウザの基本機能の裏側
2.3 フォームを利用したリダイレクト
2.4 コンテントネゴシエーション
2.4.1 ファイルの種類の決定
2.4.2 表示言語の決定
2.4.3 キャラクターセットの決定
2.4.4 圧縮による通信速度の向上
2.5.1 クッキーの分類
2.5.2 クッキーの間違った使い方
2.5.3 クッキーに制約をあたえる
2.5.4 オリジン
2.5.5 SameSite属性
2.6.2 クッキーを使ったセッション管理
2.6.3 署名付きクッキーによるセッションデータの保存 2.7 プロキシ
2.8 キャッシュ
2.8.1 更新日時によるキャッシュ
2.8.3 Pragma: no-cache
2.8.4 確実にキャッシュしない条件
2.9 リファラー
2.10 検索エンジン向けのコンテンツのアクセス制御
2.10.2 robots.txtと裁判の判例
2.12 本章のまとめ
3章 Go言語によるHTTP/1.0クライアントの実装
3.1 Go言語を使う理由
3.2 Go言語のAPIの構成
3.3 本章で取り上げるレシピ
3.4 GETメソッドの送信と、ボディ、ステータス、ヘッダーの受信
3.4.1 io.Reader
3.5 GETメソッド+クエリーの送信
3.6 HEADメソッドでヘッダーを取得
3.7 x-www-form-urlencoded形式のPOSTメソッドの送信
3.8 POSTメソッドで任意のボディを送信
3.9.1 送信するファイルに任意のMIMEタイプを設定する
3.10 クッキーの送受信
3.11 プロキシの利用
3.12 ファイルシステムへのアクセス
3.13 自由なメソッドの送信
3.14 ヘッダーの送信
3.15 タイムアウト
3.16 国際化ドメイン
3.17 本章のまとめ
4章 HTTP/1.1のシンタックス:高速化と安全性を求めた拡張
4.1.1 パイプライニング
4.2 TLS(トランスポート・レイヤー・セキュリティ)
4.2.2 共通鍵暗号と公開鍵暗号とデジタル署名
4.2.4 共通鍵方式と公開鍵方式を使い分ける理由
4.2.6 暗号強度
4.2.7 暗号スイート(Cipher Suite)
4.2.8 プロトコルの選択
4.2.9 TLSが守るもの
4.2.10 常時TLS時代
4.3 PUTメソッドとDELETEメソッドの標準化
4.4 OPTIONS、TRACE、CONNECTメソッドの追加
4.4.1 OPTIONS
4.4.2 TRACE(TRACK)
4.4.3 CONNECT
4.5 プロトコルのアップグレード
4.5.1 クライアント側からアップグレードを要請
4.5.2 サーバー側からアップグレードを要請
4.5.3 TLSへのアップグレードの問題点
4.6 バーチャルホストのサポート
4.7 チャンク
4.7.1 末尾へのヘッダーの追加
4.8 ボディ送信の確認
4.9 データURIスキーム
4.10 本章のまとめ
5章 HTTP/1.1のセマンティクス:広がるHTTPの用途
5.1 ファイルをダウンロードした後でローカルに保存
5.1.1 ファイルを保存させるContent-Dispositionヘッダー
5.1.2 デフォルトファイル名に日本語を使う
5.1.3 ブラウザ内で表示
5.2 ダウンロードの中断、再開
5.2.1 複数範囲ダウンロード
5.2.2 並列ダウンロード
5.3.1 XMLHttpRequestの誕生
5.3.2 XMLHttpRequestとブラウザのHTTPリクエストの違い
5.3.3 Comet
5.3.4 XMLHttpRequestのセキュリティ
5.4.1 クライアント自身が場所を得る方法
5.4.2 サーバーがクライアントの場所を推測する方法
5.5 X-Powered-Byヘッダー
5.6 リモートプロシージャコール(RPC)
5.6.1 XML-RPC
5.6.2 SOAP
5.6.3 JSON-RPC
5.8 ウェブサイト間で共通の認証・認可プラットフォーム
5.8.3 SAML(Security Assertion Markup Language) 5.8.8 JWT(JSON Web Token) 5.8.9 認証システムの構成
5.9 本章のまとめ
6章 Go言語によるHTTP1.1クライアントの実装
6.1 Keep-Alive
6.2 TLS
6.2.1 証明書の作成
6.2.2 HTTPSサーバーと証明書の登録
6.2.3 Go言語によるクライアントの実装
6.2.4 クライアント証明書
6.3 プロトコルのアップグレード
6.3.1 サーバー側のコード
6.3.2 クライアント側のコード
6.4 チャンク
6.4.1 サーバーからの送信
6.4.2 クライアントでの逐次受信(簡易版)
6.4.3 クライアントでの逐次受信(完全版)
6.6 本章のまとめ
7章 HTTP/2、HTTP/3のシンタックス:プロトコルの再定義
7.2 HTTP/2
7.2.2 HTTP/2の改善点
7.2.3 ストリームによる通信の高速化
7.2.4 HTTP/2のアプリケーション層
7.2.7 HTTP/2とプリロードによるリソース取得の最適化
7.2.8 HPACKによるヘッダーの圧縮
7.3 HTTP/3
7.3.2 HTTP/3への道
7.3.3 HTTP/3のレイヤー
7.3.4 HTTP Alternative Servicesによるアップグレード
7.4 新たなJavaScript用の通信API
7.5 WebRTC(Web Real-Time Communication) 7.5.1 WebRTCのユースケース(1)
7.5.2 WebRTCのユースケース(2)
7.5.3 RFC以外のユースケース
7.5.4 RTCPeerConnection
7.5.5 メディアチャンネルと getUserMedia
7.5.6 RTCDataChannel
7.6 HTTPウェブプッシュ
7.6.1 ブラウザがプッシュサービスに購読を申し込む
7.6.2 アプリケーションサーバーがプッシュサービスにメッセージを投稿
7.6.3 ブラウザがプッシュメッセージを受信
7.6.4 緊急度の設定
7.7 本章のまとめ
8章 HTTP/2のセマンティクス:新しいユースケース
8.1 レスポンシブデザイン
8.2.7 RDF系以外のデータ
8.5 AMP(Accelerated Mobile Pages) 8.6 モバイルアプリケーションにより多様化するブラウズ環境
8.6.2 AndroidのDeepLink
8.6.3 DeepLinkの例:Twitterのスマートフォンアプリを起動
8.7 HTTPライブストリーミング(HLS)による動画のストリーミング再生
8.7.1 HLSのビデオタグ
8.7.2 マスターの.m3u8ファイル
8.7.3 字幕の.m3u8ファイル
8.7.4 動画ファイル
8.7.5 HLSのメリットとデメリット
8.7.6 HLS前後の歴史
8.8.2 Media Presentation Description(MPD)ファイルの構造 8.9 CMAF(Common Media Application Format) 8.10 本章のまとめ
9章 Go言語によるHTTP/2、HTML 5のプロトコルの実装
9.2.1 HTTP/2落穂拾い
9.3.1 サーバーの実装
9.3.2 クライアントの実装
9.4.1 サーバーの実装
9.4.2 クライアントの実装
9.4.3 ルームの実装
9.5 本章のまとめ
10章 クライアント視点で見るRESTful API
10.1.2 Web APIとトランザクション
10.2 メソッド
10.2.1 べき等のGETをべき等ではない操作に使ってはいけない
10.3 ステータス
10.4 ボディ
10.5 実際のREST APIを見てみる(PAY.jpの例)
10.6 実際のREST APIを見てみる(GitHubの例)
10.6.1 GitHubの認可
10.6.2 情報取得のAPIアクセス
10.6.3 情報更新のAPIアクセス
10.7 REST APIにアクセスする時の細かいトピック
10.7.1 タイムアウト
10.7.2 アクセス数制限
10.8 本章のまとめ
11章 JavaScriptによるブラウザからの動的なHTTPリクエスト
11.1 ブラウザのHTTPとライフサイクル
11.2.1 さまざまなデータフォーマットを扱う
11.3 Fetch API
11.3.1 Fetch APIの基本
11.3.2 Fetchのオプション
11.3.3 クエリーパラメータの作成と解析
11.3.4 ボディの送信
11.3.5 Fetch APIにしかできないこと
11.3.6 Fetch APIを使うときのよくある間違い
11.3.7 ブラウザ以外のJavaScript環境からFetch
11.4 JavaScriptからブラウザのリロードをともなうHTTPアクセス
11.5 ファイルのダウンロード
11.5.1 動的にコンテンツを作成してダウンロード
11.8 本章のまとめ
12章 ウェブアプリケーションの基礎
12.1 用語の整理
12.2 基本的なフロー
12.3 ウェブアプリケーションのリクエストのライフサイクル
12.3.1 HTTPリクエスト
12.3.2 セッション
12.4 ウェブアプリケーションの動作のパターン
12.4.1 第1世代: サーバーサイドレンダリング
12.4.3 第3世代: シングルページアプリケーション
12.4.4 第3.5世代: シングルページアプリケーション+サーバーサイドレンダリング
12.5 インフラ構成
12.5.1 開発環境
12.5.2 本番環境の基本構成
12.6 その他のインフラ形態
12.6.1 PaaS(Platform as a Service) 12.7 ウェブアプリケーション内部の階層構造
12.8 ウェブアプリケーション構成要素の詳細な分類
12.9 ウェブAPIの設計 -箱の使い分け
12.10 今後はあまり使われなくなる技術
12.11 本章のまとめ
13章 クラウド時代のHTTP:ウェブを強くするさまざまな技術
13.1 より大規模なウェブシステムの構成
13.2 DNS(Domain Name Service) 13.2.1 DNSの事前問い合わせ
13.2.2 DNSサーバーのキャッシュ
13.2.3 DNSクライアントのキャッシュ
13.2.4 DNSを使ったロードバランス
13.2.5 DNSを使ったトラフィックの誘導
13.2.6 SRVレコードを使ったサービスディスカバリー
13.3.1 Go言語によるリバースプロキシの実装
13.4 CDN(Content Delivery Network) 13.4.1 通信そのものを高速化&安定化
13.4.2 ユーザーに近い高機能なプロキシサーバー
13.4.3 CDNの注意点
13.5.1 接続ドレイン
13.6 APIゲートウェイ
13.8 バーチャル・プライベート・クラウド(VPC) 13.10.1 トレース情報を子タスクに伝搬するHTTPヘッダー
13.10.2 サーバー内部の時間情報をブラウザに伝搬するHTTPヘッダー
13.11 その他の技術要素
13.12 本章のまとめ
14章 セキュリティ:ブラウザを守るHTTPの機能
14.1 従来型の攻撃
14.2 ブラウザを狙う攻撃の特徴
14.2.1 セッショントークンorクッキー
14.3.1 漏洩を防ぐためのクッキーの設定
14.3.3 Content-Security-PolicyとJavaScript製テンプレートエンジン
14.3.4 Mixed Contentへの対応
14.3.5 クロスオリジンリソースシェアリング(CORS) 14.5 セッションハイジャッキング
14.5.1 古のセッション管理とセッション固定化攻撃
14.5.2 クッキーインジェクション
14.6 クロスサイトリクエストフォージェリ(CSRF) 14.7 クリックジャッキング
14.8 リスト型アカウントハッキング
14.8.1 パスワードのストレッチ:平文でのパスワード保存をしない
14.8.2 各種パスワード保管時に使うハッシュ関数
14.8.3 パスワードのログのマスク化
14.8.5 タイムベースワンタイムパスワードアルゴリズム(TOTP)
14.8.7 ログインをユーザーに通知
14.9 脆弱性のあるコードのインジェクション
14.10 ウェブアプリケーションのためのセキュリティガイドライン
14.11 ウェブの広告とセキュリティ
14.11.1 サードパーティクッキー
14.11.2 クッキー以外の代替手段
14.11.4 ユーザーを特定せずに推定する(Finger Print)
14.12 本章のまとめ
付録
A.1.1 100番台(情報)
A.1.2 200番台(成功)
A.1.3 300番台(リダイレクト)
A.1.4 400番台(クライアントエラー)
A.1.5 500番台(サーバーエラー)
A.2 ヘッダーフィールド一覧
A.3 Internet ExplorerとContent-Security-Policyヘッダー
A.4 Go言語のJSONのパース
A.4.1 Go言語の構造体タグを使ったJSONのパース
A.4.2 省略されたか、ゼロ値かを判定する
A.4.3 特別な型変換を行いたい場合
A.5 JSON周りの応用トピック
A.5.1 出力時に出力を加工する
A.5.2 状況によって型が変わるJSONのパース
A.5.3 汎用のデータ型への変換
A.5.4 JSONスキーマ